package course.examples.AudioVideo.AudioRecording; import java.io.IOException; import android.app.Activity; import android.content.Context; import android.media.AudioManager; import android.media.AudioManager.OnAudioFocusChangeListener; import android.media.MediaPlayer; import android.media.MediaRecorder; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.ToggleButton; public class AudioRecordingActivity extends Activity { private static final String TAG = "AudioRecordTest"; private static final String mFileName = Environment .getExternalStorageDirectory().getAbsolutePath() + "/audiorecordtest.3gp"; private MediaRecorder mRecorder; private MediaPlayer mPlayer; private AudioManager mAudioManager; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); final ToggleButton mRecordButton = (ToggleButton) findViewById(R.id.record_button); final ToggleButton mPlayButton = (ToggleButton) findViewById(R.id.play_button); // Set up record Button mRecordButton.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { // Set checked state mRecordButton.setEnabled(!isChecked); // Start/stop recording onRecordPressed(isChecked); } }); // Set up play Button mPlayButton.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { // Set checked state mRecordButton.setEnabled(!isChecked); // Start/stop playback onPlayPressed(isChecked); } }); // Get AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); // Request audio focus mAudioManager.requestAudioFocus(afChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN); } // Toggle recording private void onRecordPressed(boolean shouldStartRecording) { if (shouldStartRecording) { startRecording(); } else { stopRecording(); } } // Start recording with MediaRecorder private void startRecording() { mRecorder = new MediaRecorder(); mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); mRecorder.setOutputFile(mFileName); mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); try { mRecorder.prepare(); } catch (IOException e) { Log.e(TAG, "Couldn't prepare and start MediaRecorder"); } mRecorder.start(); } // Stop recording. Release resources private void stopRecording() { if (null != mRecorder) { mRecorder.stop(); mRecorder.release(); mRecorder = null; } } // Toggle playback private void onPlayPressed(boolean shouldStartPlaying) { if (shouldStartPlaying) { startPlaying(); } else { stopPlaying(); } } // Playback audio using MediaPlayer private void startPlaying() { mPlayer = new MediaPlayer(); try { mPlayer.setDataSource(mFileName); mPlayer.prepare(); mPlayer.start(); } catch (IOException e) { Log.e(TAG, "Couldn't prepare and start MediaPlayer"); } } // Stop playback. Release resources private void stopPlaying() { if (null != mPlayer) { if (mPlayer.isPlaying()) mPlayer.stop(); mPlayer.release(); mPlayer = null; } } // Listen for Audio Focus changes OnAudioFocusChangeListener afChangeListener = new OnAudioFocusChangeListener() { @Override public void onAudioFocusChange(int focusChange) { if (focusChange == AudioManager.AUDIOFOCUS_LOSS) { mAudioManager.abandonAudioFocus(afChangeListener); // Stop playback, if necessary if (mPlayer.isPlaying()) stopPlaying(); } } }; // Release recording and playback resources, if necessary @Override public void onPause() { super.onPause(); if (null != mRecorder) { mRecorder.release(); mRecorder = null; } if (null != mPlayer) { mPlayer.release(); mPlayer = null; } } }